<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
<HEAD>

<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2016. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
<TITLE>Reusing parts of the UI</TITLE>

<link rel="stylesheet" type="text/css" HREF="../book.css">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H2>
Reusing parts of the UI</H2>
<p>
You may reuse the p2 UI in its entirety, or you may pick and choose which aspects of the UI you want to include in your application.
</p>
<h3>Reusing the Eclipse SDK UI in its entirety</h3>
<p>If your goal is to simply use the same update UI used in the SDK inside your RCP app, very few modifications are required. You'll 
need to include the org.eclipse.equinox.p2.user.ui feature in your application.  This will add the following UI bundles to your 
application (in addition to all of the p2 core and other required bundles):</p>
<ul>
<li>org.eclipse.equinox.p2.ui</li>
<li>org.eclipse.equinox.p2.ui.sdk</li>
<li>org.eclipse.equinox.p2.ui.sdk.scheduler</li>
</ul>

<p>The contributions made in the <b>org.eclipse.equinox.p2.ui.sdk</b> assume that the application has defined a <b>Help</b> menu and
an <b>additions</b> group for adding menu contributions.
</p>
<p>
A sample RCP Mail application which shows this kind of reuse can be found 
<a href="http://git.eclipse.org/c/equinox/rt.equinox.p2.git/tree/examples/org.eclipse.equinox.p2.examples.rcp.sdkui/">
here</a>.</p>
<p><img border="0" src="images/p2reuse.png" alt="Example RCP Application with p2 UI" >
</p>
<h3>Reusing the Eclipse SDK UI without automatic updating</h3>
<p>
If you want to use the SDK UI, but do not wish to add automatic update support, the application is modified as above.  
However, the following bundles can be eliminated from the product:</p>
<ul>
<li>org.eclipse.equinox.p2.ui.sdk.scheduler</li>
<li>org.eclipse.equinox.p2.updatechecker</li>
</ul>

<p>
A sample RCP Mail application which shows how to do this can also be found 
<a href="http://git.eclipse.org/c/equinox/rt.equinox.p2.git/tree/examples/org.eclipse.equinox.p2.examples.rcp.sdknoautoupdates/">here</a>.  
</p>
<h3>Modifying the UI contributions</h3>
<p>
If you want to include p2 update functionality in the UI, but you don't want these items to appear in exactly the 
same way as they do in the SDK, you can provide your own bundle that makes p2 UI contributions in lieu of the SDK bundle.  
This allows you to simply rearrange the way users encounter the install/update functionality, or provide more precise 
control of what can be done by the user.  For example, you may wish to expose a subset of functionality, such as 
permitting updating, but not allowing the user to uninstall, install, or revert configurations.  
</p>
<p>The general approach for this kind of reuse is as follows:</p>
<ul>
<li>Decide which p2 UI bundles to include in your product</li>
<li>
<ul>
<li>Always include <b>org.eclipse.equinox.p2.ui</b></li>
<li>If you wish to use automatic update checking, include <b>org.eclipse.equinox.p2.updatechecker</b></li>
<li>If you wish to reuse the SDK UI for automatic update checking (the same pref page, popup, etc.), then you can also include 
<b>org.eclipse.equinox.p2.ui.sdk.scheduler</b></li>
</ul>
</li>
<li>Your application must replace the functionality provided by <b>org.eclipse.equinox.p2.ui.sdk</b> according to what functionality 
is needed. </li>
</ul>

<p>
Use the <b>org.eclipse.equinox.p2.ui.sdk</b> bundle as a model when determining which contributions to make.  For example, if you are exposing 
user preferences, and you are including the SDK's automatic update support (and pref page), then you probably want the automatic 
update preferences to appear underneath your application's update preferences. If so, then you'll want to use the same preference page 
ID as used by <b>org.eclipse.equinox.p2.ui.sdk</b> so that the automatic update preference page contribution falls underneath it.
</p>
<p>
The <b>IHandler</b> classes in <b>org.eclipse.equinox.p2.ui.sdk</b> invoke the update and install function.  If you are simply 
rearranging the menus in your application, you can copy these handler classes and command contributions to your bundle and 
revise the menu contributions as you wish.  Or you can invoke the UI in a completely different way.
</p>
<p>The <b>org.eclipse.ui.about.installationPages</b> contributions made by the SDK UI provide access to update functionality.  
Consider replacing or modifying the installation page contributions if some of the actions are not relevant.
</p>
</BODY>
</HTML>